/*
 * Copyright (C) 2025 Square, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package app.cash.redwood.widget.uiview

import app.cash.redwood.snapshot.testing.UIViewTestWidgetFactory
import app.cash.redwood.widget.AbstractRedwoodViewFocusTest
import app.cash.redwood.widget.RedwoodUIView
import app.cash.redwood.widget.RedwoodView
import app.cash.redwood.widget.Widget
import platform.UIKit.UIView
import platform.UIKit.UIViewController
import platform.UIKit.UIWindow

/** Note that this test doesn't take screenshots and doesn't need a `KotlinHostingXCTestCase`. */
class UIViewRedwoodViewFocusTest : AbstractRedwoodViewFocusTest<UIView, RedwoodUIView>() {
  override val widgetFactory = UIViewTestWidgetFactory

  override fun redwoodView(): RedwoodUIView {
    val result = RedwoodUIView()

    // Put the RedwoodUIView in a window so that its widgets can be focused.
    UIWindow().apply {
      rootViewController = object : UIViewController(null, null) {
        override fun loadView() {
          view = result.value
        }
      }
      hidden = false
    }

    return result
  }

  override fun getFocused(redwoodView: RedwoodView<UIView>): Widget<UIView>? {
    return redwoodView.children.widgets.firstOrNull { it.value.isFirstResponder() }
  }
}
